package com.chenjun.common.util;

import org.apache.commons.lang3.StringUtils;

/**
 * 
 * @Title ExceptionUtil
 * @Description:
 * @author 李伟
 * @date 2015年8月20日 上午11:02:10
 */
public class ExceptionUtil {
	private ExceptionUtil() {
	}

	/**
	 * 获取string类型的exception信息
	 * 
	 * @author 李伟
	 * @date 2015年8月20日 上午11:01:40
	 * @param e
	 * @return
	 */
	public static String getExceptionStr(Throwable e) {
		StringBuffer rtnVal = new StringBuffer();
		appendExceptionString(e, rtnVal, 0);
		return rtnVal.toString();
	}

	private static void appendExceptionString(Throwable e, StringBuffer rtnVal,
			int time) {
		String strMsg = e.toString();
		if (!StringUtils.isBlank(strMsg)) {
			rtnVal.append(strMsg);
			rtnVal.append("\r\n\t");
		}
		StackTraceElement[] ste = e.getStackTrace();
		if (ste.length > 0) {
			rtnVal.append(ste[0].toString());
			for (int i = 1; i < ste.length; i++) {
				rtnVal.append("\r\n\t");
				rtnVal.append(ste[i].toString());
			}
		}
		if (e.getCause() != null) {
			if (time > 10) {
				rtnVal.append("\r\nCaused by:").append(e.getCause());
			} else {
				rtnVal.append("\r\nCaused by:");
				appendExceptionString(e.getCause(), rtnVal, time + 1);
			}
		}
	}
}
